package com.hp.ams.ongoing.netatendimento.test;

import java.util.ArrayList;
import java.util.List;

import com.hp.ams.ongoing.netatendimento.application.impl.ServiceBasicData;
import com.hp.ams.ongoing.netatendimento.infrastructure.exception.DataBaseAcessException;
import com.hp.ams.ongoing.netatendimento.infrastructure.persistence.MongoDbRepository;
import com.hp.ams.ongoing.netatendimento.model.entity.Categorizacao;
import com.hp.ams.ongoing.netatendimento.model.entity.GrupoExecucao;
import com.hp.ams.ongoing.netatendimento.model.entity.GrupoExecucaoCategorizacao;
import com.hp.ams.ongoing.netatendimento.model.entity.Motivo;
import com.hp.ams.ongoing.netatendimento.model.entity.Problema;
import com.hp.ams.ongoing.netatendimento.model.entity.RegistroAtendimento;
import com.hp.ams.ongoing.netatendimento.model.entity.RetornoScriptExecucao;
import com.hp.ams.ongoing.netatendimento.model.entity.ScriptExecucao;
import com.hp.ams.ongoing.netatendimento.model.entity.Solucao;
import com.hp.ams.ongoing.netatendimento.model.valueobject.IncidentVO;

public class MockNetAnalyser {
	
    private static List<IncidentVO> lstIncidents = new ArrayList<IncidentVO>();

    public static MongoDbRepository repository = MongoDbRepository.getInstance();
    
	public static List<IncidentVO> getLstIncidents() {
		return lstIncidents;
	}

	public static void setLstIncidents(List<IncidentVO> lstIncidents) {
		MockNetAnalyser.lstIncidents = lstIncidents;
	}

	public static void main(String[] args) {
	    // name of Excel file you want to read.
	    //String fileName = "C:/Desenvolvimento/eclipseIndigoJEEWorkspace/NETAnalyser/src/main/webapp/resource/excel/chamado_mock1.xlsx";
//		String fileName = "C:/HP_ON/Desenvolvimento/JAVA/WorkSpaces/HP_Projects/OnGoing/NETAnalyser/src/main/webapp/resource/excel/chamado_mock1.xlsx";
//	    IncidentVO vo = null;
//	    Categorizacao categoria = null;
//	    TipoRegistro tipo = null;
//	    Cidade cidade = null;
//	    
//	    // Read an Excel File and Store in an ArrayList
//	    ArrayList<ArrayList<XSSFCell>> dataHolder = ExcelReader.readExcelFile(fileName);
//	    //criarColecoes();
//	    //cleanUpCollections();
//	    // Print the data read
//	    //ExcelReader.printCellDataToConsole(dataHolder);
//	    
//	    String cpfCnpj = "01396211000158";
//	    Long.valueOf(cpfCnpj);
//	    
//	    MongoDbRepository rep = MongoDbRepository.getInstance();
//	    Object[] valuesCat = {"NETSMS.CATEGORIA2"};
//	    Categorizacao c = new Categorizacao();
//	    //rep.insertDocumentToCollection(Categorizacao.class,valuesCat);
//	    
//	    for(ArrayList<XSSFCell> cellList : dataHolder)
//	    {
//	    	vo = new IncidentVO();	
//	    	categoria = new Categorizacao();
//	    	tipo = new TipoRegistro();
//	    	Object[] cell = (Object[]) cellList.toArray();	      
//	        String stringCellValue = cell.toString();	        
//	        System.out.print(stringCellValue +"\t");
//	        vo.setNumChamado(cell[0].toString());
//	        categoria.setDsCategoria(cell[1].toString());
//	        vo.setCategorizacao(categoria);
//			Map<String,Object> map = new HashMap<String,Object>();		
//			map.put("ds_tipo_registro", cell[2].toString());
//	        try {
//				tipo = (TipoRegistro) ServiceBasicData.getInstance().findDataByParam(TipoRegistro.class, map);
//			} catch (DataBaseAcessException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//	        vo.setTipoRegistro(tipo);
//	        vo.setVlrRegistro(cell[3].toString());	        
//	        cidade = ServiceBasicData.getInstance().findCidadeByParams((cell[4].toString()));
//	        vo.setCidade(cidade);
//	        lstIncidents.add(vo);
//	      System.out.println(vo);
//	    }
//		List<ResultAnalysisVO> resAll = new ArrayList<ResultAnalysisVO>();
//
//		IServiceProcessAnalysis service  = ContextServiceProcess.getMapService().get(ApplicationConstantsEnum.GRUPO_NETSALES);		
//		List<ResultAnalysisVO> res1 = null;
//		CidadeComparator comp = new CidadeComparator();
//	    Collections.sort(lstIncidents,comp);
//		try {
//			service.process(lstIncidents);
//		} catch (DataBaseAcessException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//		for (IncidentVO vo2 : lstIncidents) {
//			//res1 = service.process(vo2);
//			//resAll.addAll(res1);
//			
//			System.out.println("");
//		}		
	//criarColecoes();	
		//inserirProblema();
		inserirRegistro();
	}
		
	private static void criarColecoes() {
		Class[] clazz = {RegistroAtendimento.class};
		for (int i = 0; i < clazz.length; i++) {
			ServiceBasicData.getInstance().createCollection(clazz[i]);			
		}		
	}
	
	private static void inserirProblema(){
		Problema p = new Problema("Problema blablabla");
		repository.insert(p);
	}
	
	private static void inserirRegistro(){
		RegistroAtendimento atend = new RegistroAtendimento();
		Problema p1 = new Problema("Problema blablabla");
		Problema p2 = new Problema("Problema blablabla");
		Motivo m1 = new Motivo("Problema blablabla");
		Motivo m2 = new Motivo("Problema blablabla");
		Solucao s1 = new Solucao("Problema blablabla");
		Solucao s2 = new Solucao("Problema blablabla");
		List<Problema> probs = new ArrayList<Problema>();
		probs.add(p1);
		probs.add(p2);
		List<Solucao> sols = new ArrayList<Solucao>();
		sols.add(s1);
		sols.add(s2);
		List<Motivo> motivs = new ArrayList<Motivo>();
		motivs.add(m1);
		motivs.add(m2);
		atend.setMotivos(motivs);
		atend.setProblemas(probs);
		atend.setSolucoes(sols);
		
		repository.insert(atend);
	}

	private static void popularIncidentes() {
		IncidentVO vo1 = new IncidentVO();
		vo1.setNumChamado("2012121");
		
	}
	
	public static void cleanUpCollections(){
		Class[] clazz = {GrupoExecucao.class,GrupoExecucaoCategorizacao.class,ScriptExecucao.class,RetornoScriptExecucao.class,Categorizacao.class};
		for (int i = 0; i < clazz.length; i++) {
			try {
				ServiceBasicData.getInstance().deleteAll(clazz[i]);
			} catch (DataBaseAcessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
		}
	}

	public static List<IncidentVO> mockIncidents1(){
		List<IncidentVO> lst = new ArrayList<IncidentVO>();				
		return lst;
	}

}
